package org.ch02.test03;

import org.ch02.entity.Student;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * 反射常用API：Field - 类的属性（字段）
 *
 * @author CSY
 * @date 2025 - 03 - 18
 */
public class MainTest03 {
    public static void main(String[] args) throws Exception {
        //第一：获取操作类的Class对象
        Class<Student> clazz = Student.class;

        //第二：基于Class对象，实现相关的操作 - 运行时、动态性 - 框架、工具
        //Class对象可以获取类的所有信息（对象）
        //1.获取所有的字段（属性）
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            //2.获取字段（属性）修饰符 - 整型的表示
            int modifiers = field.getModifiers();
            System.out.println("整型表示的字段修饰符："+modifiers);
            //3.获取字段（属性）修饰符 - 字符串的表示
            String modifierStr = Modifier.toString(modifiers);
            System.out.println("字符串表示的字段修饰符："+modifierStr);
            //4.获取字段（属性）的数据类型 - 数据类型的Class对象
            Class<?> type = field.getType();
            String typeName = type.getName();
            String simpleTypeName = type.getSimpleName();
            System.out.println("字段数据类型(包名.类名)："+typeName);
            System.out.println("字段数据类型(类名|名称)："+simpleTypeName);
            //5.判断数据类型是否为基本数据类型
            boolean primitive = type.isPrimitive();
            System.out.println("是否为基本数据类型："+primitive);
            //6.获取字段（属性）名称
            System.out.println(field.getName());
        }

    }
}
